﻿
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Configuration;
using System.Data.SqlClient;
using System.Web.Configuration;
using log4net;
namespace SW_SoftBully.Models.ModuloAdministracion.Producto
{
    public class ProductoDAO
    {
        private static ILog log = LogManager.GetLogger(typeof(ProductoDAO));

        public List<ProductoBean> buscarProducto(FiltroProdcuto filtro)
        {
            String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;
            List<ProductoBean> listaProducto = new List<ProductoBean>();
            SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);
            sqlCon.Open();
            try
            {

                string commandString = "select p.Descripcion,p.estado,p.IdProducto,p.Nombre,p.precio_estimado,p.tipo_Producto,pe.cantidad from producto p ,producto_x_edificio pe where  p.IdProducto=pe.IdProducto and pe.id_Edificio="+ filtro.idEdificio + " and  p.estado =1  ";




                string auxFiltro = "";
                //  where p.Nombres like '%asd%' and p.Apellidos like '%asd%' and c.Id_Cargo =2 and p.Nro_Documento_persona like '%1%'"

              

                if (!(filtro.nombre== null || filtro.nombre.Trim().Equals("")))
                {
                    auxFiltro = auxFiltro + " and  Nombre like '%" + filtro.nombre.Trim() + "%'  ";
                }

                if (!(filtro.tipoProducto == null || filtro.tipoProducto.Trim().Equals("")))
                {
                    auxFiltro = auxFiltro + " and  tipo_producto like '%" + filtro.tipoProducto.Trim() + "%'  ";
                }

                if (!(filtro.descripcion == null || filtro.descripcion.Trim().Equals("")))
                {
                    auxFiltro = auxFiltro + " and  descripcion like '%" + filtro.descripcion.Trim() + "%'  ";
                }

                if ( filtro.precioEstimadoMayor != 0  ) 
                {
                    auxFiltro = auxFiltro + " and  precio_estimado >=" + filtro.precioEstimadoMayor;
                }

                if (filtro.precioEstimadoMenor != 0) 
                {
                    auxFiltro = auxFiltro + " and  precio_estimado <=" + filtro.precioEstimadoMenor;
                }

                if (filtro.stockMayor != 0)
                {
                    auxFiltro = auxFiltro + " and  cantidad >=" + filtro.stockMayor;
                }
                if (filtro.stockMenor != 0)
                {
                    auxFiltro = auxFiltro + " and  cantidad <=" + filtro.stockMenor;
                }


                commandString = commandString + auxFiltro;
                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    ProductoBean prod = new ProductoBean() ;
                    //cliente. = (int)dataReader["idUsuario"];
                    prod.idProducto = (int)dataReader["idproducto"];
                    prod.stock = Convert.ToInt32 (dataReader["cantidad"]);
                    prod.nombre = (string)dataReader["nombre"];
                    prod.tipoProducto = (string)dataReader["tipo_producto"];
                  
                    prod.precioEstimado = Convert.ToDouble((decimal)dataReader["precio_estimado"]);
                    prod.descripcion = (string)dataReader["descripcion"];
                   
                    listaProducto.Add(prod);
                }
                dataReader.Close();
                sqlCon.Close();

                return listaProducto;
            }
            catch (Exception ex)
            {
                sqlCon.Close();
                return null;

            }



        }

        public List<string> cargarTipoProducto()
        {
            String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;
            List<string> listaTema = new List<string>();
            SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);
            sqlCon.Open();
            try
            {

                string commandString = "select distinct tipo_producto from tipo_producto where estado =1";


                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {



                    listaTema.Add((string)dataReader["tipo_producto"]);
                }
                dataReader.Close();




                sqlCon.Close();

                return listaTema;
            }
            catch (Exception ex)
            {
                sqlCon.Close();
                return null;

            }



        }


        public string mantenerProducto(ProductoBean producto)
        {

            //******************************************************************
            int edificio = 2;
            //******************************************************************

            string mensaje = "";
            String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;
            string commandString = "";
            SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);
            SqlCommand sqlCmd;
            sqlCon.Open();

            try
            {

                if (producto.accion == 0)
                {
                    commandString = "update  producto set estado=0 where idproducto=" + producto.idProducto;
                    mensaje = "Se elimino el producto correctamente";

                }
                if (producto.accion == 1)
                {
                    int x;
                    commandString = "select count(*) from producto where nombre ='" + producto.nombre + "' and estado=1";
                    sqlCmd = new SqlCommand(commandString, sqlCon);
                    if (!Convert.IsDBNull(sqlCmd.ExecuteScalar()))
                    {
                        x = (int)sqlCmd.ExecuteScalar();
                    }
                    else
                    {

                        x = 0;
                    }



                    if (x != 0)
                    {
                        mensaje = "El producto: '" + producto.nombre + "' ya existe, No se pudo insertar";
                        sqlCon.Close();
                        return mensaje;
                    }
                    commandString = "insert into producto values('" + producto.tipoProducto + "','" + producto.nombre + "','" + producto.descripcion + "'," + producto.precioEstimado + ",1)";
                    mensaje = "Se inserto el producto correctamente";
                    sqlCmd = new SqlCommand(commandString, sqlCon);
                    sqlCmd.ExecuteNonQuery();
                    commandString = "select max(idproducto) from producto";
                    sqlCmd = new SqlCommand(commandString, sqlCon);
                    producto.idProducto = Convert.ToInt32( sqlCmd.ExecuteScalar());

                    commandString = "insert into producto_x_edificio values (" + producto.idEdificio + "," + producto.idProducto + "," + producto.stock + ")";
                    sqlCmd = new SqlCommand(commandString, sqlCon);
                    sqlCmd.ExecuteNonQuery();

                    sqlCon.Close();
                    return mensaje;
                }
                if (producto.accion == 2)
                {
                    commandString = "update producto set tipo_producto='" + producto.tipoProducto + "',nombre='" + producto.nombre + "',descripcion='" + producto.descripcion + "',precio_estimado=" + producto.precioEstimado + " where idproducto=" + producto.idProducto;
                    mensaje = "Se modifico el producto correctamente";
                    sqlCmd = new SqlCommand(commandString, sqlCon);
                    sqlCmd.ExecuteNonQuery();
                    commandString = "update producto_x_edificio set   cantidad=" + producto.stock + " where      id_edificio=" + producto.idEdificio + " and  idproducto=" + producto.idProducto;
                    sqlCmd = new SqlCommand(commandString, sqlCon);
                    sqlCmd.ExecuteNonQuery();

                    sqlCon.Close();
                    return mensaje;
                }
                sqlCmd = new SqlCommand(commandString, sqlCon);
                sqlCmd.ExecuteNonQuery();
                sqlCon.Close();
            }

            catch (Exception ex)
            {

                if (producto.accion == 0)
                {
                    mensaje = "No se pudo eliminar el producto correctamente";

                }
                if (producto.accion == 1)
                {
                    mensaje = "No se pudo insertar el producto correctamente";
                }
                if (producto.accion == 2)
                {
                    mensaje = "No se pudo modificar el producto correctamente";
                }

                if (producto.accion == 0)
                {
                    log.Error(" Eliminar producto - GET(EXCEPTION):", ex);
                }


                if (producto.accion == 1)
                {
                    log.Error(" Registrar producto - GET(EXCEPTION):", ex);
                }

                if (producto.accion == 2)
                {
                    log.Error(" Modificar producto - GET(EXCEPTION):", ex);
                }

              
                throw ex;
            }finally{


                sqlCon.Close();

            }
            return mensaje;
        }


    }


}